package cn.sytton.taffecloud.service.system.service;

import cn.sytton.taffecloud.common.db.model.PageParam;
import cn.sytton.taffecloud.service.system.entity.Auth;
import cn.sytton.taffecloud.service.system.entity.RoleEntity;
import cn.sytton.taffecloud.service.system.entity.RoleUserEntity;
import cn.sytton.taffecloud.service.system.entity.UserEntity;
import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

/**
 * 角色服务层接口
 *
 * @author skyrock
 */
public interface IRoleService {

    PageInfo<RoleEntity> findListPage(PageParam pp);

    RoleEntity findById(String id);

    void create(RoleEntity entity);

    void update(RoleEntity entity);

    void delete(String... ids);

    /**
     * 获取角色的授权菜单ID及功能ID
     * @param roleId 角色ID
     * @return { menuIds, String[], funcKeys: String[] }
     */
    Map<String, Object> findMenu(String roleId);

    /**
     * 授权角色菜单及权限
     * @param auth
     */
    void authMenu(Auth auth);

    /**
     * 根据角色ID查询用户列表
     * @param roleId 角色ID
     * @param pp 分页参数
     * @return 用户列表分页对象
     */
    PageInfo<UserEntity> findUserListPage(String roleId, PageParam pp);

    /**
     * 添加角色用户
     * @param entity userIds, roleId
     */
    void addUsers(RoleUserEntity entity);

    /**
     * 移除角色用户
     * @param entity userIds, roleId
     */
    void removeUsers(RoleUserEntity entity);

    /**
     * 修改角色状态
     * @param entity 角色对象
     */
    void updateRoleStatus(RoleEntity entity);

    /**
     * 导入
     * @param file 导入file
     * @return 返回导入结果文件名称
     */
    String importData(MultipartFile file);
}
